Basic Interactive Mapping of Irrigation Area¶

Setup Data¶

Libraries:

  • Geopandas for dataframe's geometry manipulation
  • Pandas for general dataframe manipulation
  • Folium for more advanced mapping if geopandas isn't sufficient

Irrigation Area:

  • Colo
  • Semen/ Krinjo
  • Klambu
  • Sedadi
  • Sidorejo
  • Bodri Trompo
  • Progo Manggis/ Kalibening

Data :

  • Irrigation channel and buildings alongside it
In [1]:
# import libraries
import geopandas as gpd
import pandas as pd
import folium
from shapely.geometry import Point, LineString, Polygon
In [2]:
# read file
# colo
colo_path = 'https://raw.githubusercontent.com/dimasrdwiaji/gis-jij/main/map_00020011_D_I_%20Colo.json'
raw_colo = gpd.read_file(colo_path)

# semen
semen_path = 'https://raw.githubusercontent.com/dimasrdwiaji/gis-jij/main/map_00020012_D_I_%20Semen_Krinjo.json'
raw_semen = gpd.read_file(semen_path)

# klambu
klambu_path = 'https://raw.githubusercontent.com/dimasrdwiaji/gis-jij/main/map_00030004_D_I_%20Klambu.json'
raw_klambu = gpd.read_file(klambu_path)

# sedadi
sedadi_path = 'https://raw.githubusercontent.com/dimasrdwiaji/gis-jij/main/map_00030009_D_I_%20Sedadi.json'
raw_sedadi = gpd.read_file(sedadi_path)

# sidorejo
sidorejo_path = 'https://raw.githubusercontent.com/dimasrdwiaji/gis-jij/main/map_00030013_D_I_%20Sidorejo.json'
raw_sidorejo = gpd.read_file(sidorejo_path)

# bodri trompo
bodri_path = 'https://raw.githubusercontent.com/dimasrdwiaji/gis-jij/main/map_00030014_D_I_%20Bodri%20Trompo.json'
raw_bodri = gpd.read_file(bodri_path)

# progo manggis
progo_path = 'https://raw.githubusercontent.com/dimasrdwiaji/gis-jij/main/map_00040002_D_I_%20Progo%20Manggis_Kalibening.json'
raw_progo = gpd.read_file(progo_path)
In [3]:
# define function to subset/ separate irrigation channel and building
def subset_channel(x):
    result = gpd.GeoDataFrame(x[x['geometry'].geom_type == 'LineString'])
    # drop null values
    result = result.dropna(subset='n_aset')
    return result
        
def subset_building(x):
    result = gpd.GeoDataFrame(x[x['geometry'].geom_type == 'Point'])
    return result

# define area that would be subsetted

irrigation_area = [
    raw_colo,
    raw_semen,
    raw_klambu,
    raw_sedadi,
    raw_sidorejo,
    raw_bodri,
    raw_progo
]
In [4]:
# subset irrigation channel and irrigation building
# NOTE : i should use a loop function here so i dont repeat the code too often. But, idk how to programmatically create named global variable inside function

# channel
colo_channel = subset_channel(raw_colo)
semen_channel = subset_channel(raw_semen)
klambu_channel = subset_channel(raw_klambu)
sedadi_channel = subset_channel(raw_sedadi)
sidorejo_channel = subset_channel(raw_sidorejo)
bodri_channel = subset_channel(raw_bodri)
progo_channel = subset_channel(raw_progo)

# infrastructure
colo_infra = subset_building(raw_colo)
semen_infra = subset_building(raw_semen)
klambu_infra = subset_building(raw_klambu)
sedadi_infra = subset_building(raw_sedadi)
sidorejo_infra = subset_building(raw_sidorejo)
bodri_infra = subset_building(raw_bodri)
progo_infra = subset_building(raw_progo)

Mapping¶

In [44]:
# Colo (basemap)
# Irrigation channel
colo_tmap = colo_channel.explore(
    column = 'n_aset',
    tiles = 'OpenStreetMap',
    popup = [
        'n_di',
        'nama',
        'nomenklatur',
        'n_aset',
        'panjang_saluran',
        'luas_layanan',
    ],
    highlight = True,
    name = 'Jenis Saluran',
    tooltip = [
        'nama',
        'n_aset',
    ],
     legend_kwds = dict(
         {
             'caption': 'Jenis Saluran',
         }
     ),
)

# Irrigation infrastructure
colo_infra_map = colo_infra.explore(
    m = colo_tmap,
    column = 'n_aset',
    name = 'Aset Irigasi',
    popup = [
        'n_di',
        'nama',
        'nomenklatur',
        'k_aset',
        'saluran'
    ],
    tooltip = [
        'nama',
        'nomenklatur',
    ],
    highlight = True,
    legend = False,
    marker_kwds = dict(
        {
            'radius' : 5,
        }
    )
)
In [45]:
# Semen
# Irrigation channel
semen_tmap = semen_channel.explore(
    column = 'n_aset',
    tiles = 'OpenStreetMap',
    popup = [
        'n_di',
        'nama',
        'nomenklatur',
        'n_aset',
        'panjang_saluran',
        'luas_layanan',
    ],
    highlight = True,
    name = 'Jenis Saluran',
    tooltip = [
        'nama',
        'n_aset',
    ],
     legend_kwds = dict(
         {
             'caption': 'Jenis Saluran',
         }
     ),
)

# Irrigation infrastructure
semen_infra_map = semen_infra.explore(
    m = semen_tmap,
    column = 'n_aset',
    name = 'Aset Irigasi',
    popup = [
        'n_di',
        'nama',
        'nomenklatur',
        'k_aset',
        'saluran'
    ],
    tooltip = [
        'nama',
        'nomenklatur',
    ],
    highlight = True,
    legend = False,
    marker_kwds = dict(
        {
            'radius' : 5,
        }
    )
)
In [46]:
# Klambu
# Irrigation channel
klambu_tmap = klambu_channel.explore(
    column = 'n_aset',
    tiles = 'OpenStreetMap',
    popup = [
        'n_di',
        'nama',
        'nomenklatur',
        'n_aset',
        'panjang_saluran',
        'luas_layanan',
    ],
    highlight = True,
    name = 'Jenis Saluran',
    tooltip = [
        'nama',
        'n_aset',
    ],
     legend_kwds = dict(
         {
             'caption': 'Jenis Saluran',
         }
     ),
)

# Irrigation infrastructure
klambu_infra_map = klambu_infra.explore(
    m = klambu_tmap,
    column = 'n_aset',
    name = 'Aset Irigasi',
    popup = [
        'n_di',
        'nama',
        'nomenklatur',
        'k_aset',
        'saluran'
    ],
    tooltip = [
        'nama',
        'nomenklatur',
    ],
    highlight = True,
    legend = False,
    marker_kwds = dict(
        {
            'radius' : 5,
        }
    )
)
In [47]:
# Sedadi
# Irrigation channel
sedadi_tmap = sedadi_channel.explore(
    column = 'n_aset',
    tiles = 'OpenStreetMap',
    popup = [
        'n_di',
        'nama',
        'nomenklatur',
        'n_aset',
        'panjang_saluran',
        'luas_layanan',
    ],
    highlight = True,
    name = 'Jenis Saluran',
    tooltip = [
        'nama',
        'n_aset',
    ],
     legend_kwds = dict(
         {
             'caption': 'Jenis Saluran',
         }
     ),
)

# Irrigation infrastructure
sedadi_infra_map = sedadi_infra.explore(
    m = sedadi_tmap,
    column = 'n_aset',
    name = 'Aset Irigasi',
    popup = [
        'n_di',
        'nama',
        'nomenklatur',
        'k_aset',
        'saluran'
    ],
    tooltip = [
        'nama',
        'nomenklatur',
    ],
    highlight = True,
    legend = False,
    marker_kwds = dict(
        {
            'radius' : 5,
        }
    )
)
In [48]:
# Sidorejo
# Irrigation channel
sidorejo_tmap = sidorejo_channel.explore(
    column = 'n_aset',
    tiles = 'OpenStreetMap',
    popup = [
        'n_di',
        'nama',
        'nomenklatur',
        'n_aset',
        'panjang_saluran',
        'luas_layanan',
    ],
    highlight = True,
    name = 'Jenis Saluran',
    tooltip = [
        'nama',
        'n_aset',
    ],
     legend_kwds = dict(
         {
             'caption': 'Jenis Saluran',
         }
     ),
)

# Irrigation infrastructure
sidorejo_infra_map = sidorejo_infra.explore(
    m = sidorejo_tmap,
    column = 'n_aset',
    name = 'Aset Irigasi',
    popup = [
        'n_di',
        'nama',
        'nomenklatur',
        'k_aset',
        'saluran'
    ],
    tooltip = [
        'nama',
        'nomenklatur',
    ],
    highlight = True,
    legend = False,
    marker_kwds = dict(
        {
            'radius' : 5,
        }
    )
)
In [49]:
# Bodri Trompo
# Irrigation channel
bodri_tmap = bodri_channel.explore(
    column = 'n_aset',
    tiles = 'OpenStreetMap',
    popup = [
        'n_di',
        'nama',
        'nomenklatur',
        'n_aset',
        'panjang_saluran',
        'luas_layanan',
    ],
    highlight = True,
    name = 'Jenis Saluran',
    tooltip = [
        'nama',
        'n_aset',
    ],
     legend_kwds = dict(
         {
             'caption': 'Jenis Saluran',
         }
     ),
)

# Irrigation infrastructure
bodri_infra_map = bodri_infra.explore(
    m = bodri_tmap,
    column = 'n_aset',
    name = 'Aset Irigasi',
    popup = [
        'n_di',
        'nama',
        'nomenklatur',
        'k_aset',
        'saluran'
    ],
    tooltip = [
        'nama',
        'nomenklatur',
    ],
    highlight = True,
    legend = False,
    marker_kwds = dict(
        {
            'radius' : 5,
        }
    )
)
In [50]:
# Progo Manggis
# Irrigation channel
progo_tmap = progo_channel.explore(
    column = 'n_aset',
    tiles = 'OpenStreetMap',
    popup = [
        'n_di',
        'nama',
        'nomenklatur',
        'n_aset',
        'panjang_saluran',
        'luas_layanan',
    ],
    highlight = True,
    name = 'Jenis Saluran',
    tooltip = [
        'nama',
        'n_aset',
    ],
     legend_kwds = dict(
         {
             'caption': 'Jenis Saluran',
         }
     ),
)

# Irrigation infrastructure
progo_infra_map = progo_infra.explore(
    m = progo_tmap,
    column = 'n_aset',
    name = 'Aset Irigasi',
    popup = [
        'n_di',
        'nama',
        'nomenklatur',
        'k_aset',
        'saluran'
    ],
    tooltip = [
        'nama',
        'nomenklatur',
    ],
    highlight = True,
    legend = False,
    marker_kwds = dict(
        {
            'radius' : 5,
        }
    )
)
In [51]:
# Add interactivity

map_list = [
    colo_tmap,
    semen_tmap,
    klambu_tmap,
    sedadi_tmap,
    sidorejo_tmap,
    bodri_tmap,
    progo_tmap,
]

for e in map_list:
    folium.TileLayer(
    tiles = 'https://tiles.stadiamaps.com/tiles/outdoors/{z}/{x}/{y}{r}.png',
    attr = '&copy; <a href="https://stadiamaps.com/">Stadia Maps</a>, &copy; <a href="https://openmaptiles.org/">OpenMapTiles</a> &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors',
    control = True,
    name = 'Stadia Outdoors').add_to(e)
    
    folium.TileLayer(
    tiles = 'https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png',
	attr = '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors &copy; <a href="https://carto.com/attributions">CARTO</a>',
    control = True,
    subdomains = 'abcd',
    name = 'CartoDB Positron').add_to(e)
    
    folium.TileLayer(
    tiles = 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',
    attr = 'Tiles &copy; Esri &mdash; Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community',
    control = True,
    name = 'ESRI World Imagery').add_to(e)
    
    folium.LayerControl().add_to(e)

View Map¶

Colo Irrigation Area¶

In [55]:
colo_tmap
Out[55]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Semen Irrigation Area¶

In [52]:
semen_tmap
Out[52]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Klambu Irrigation Area¶

In [56]:
klambu_tmap
Out[56]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Sedadi Irrigation Area¶

In [57]:
sedadi_tmap
Out[57]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Sidorejo Irrigation Area¶

In [58]:
sidorejo_tmap
Out[58]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Bodri Trompo Irrigation Area¶

In [59]:
bodri_tmap
Out[59]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Progo Manggis Irrigation Area¶

In [60]:
progo_tmap
Out[60]:
Make this Notebook Trusted to load map: File -> Trust Notebook